草庐IT

Python property、setter、deleter

全部标签

c++ - 为什么运行时环境不能决定应用 delete 或 delete[] 而不是程序员?

我读到需要delete[]运算符,因为运行时环境不会保留有关分配的block是否是需要析构函数调用的对象数组的信息,但它确实实际上保留了有关分配的block存储在内存中的位置的信息,当然还有block的大小。只需要一点元数据就可以记住是否需要在删除时调用析构函数,那么为什么不这样做呢?我很确定有一个很好的解释,我不是在质疑它,我只是想知道它。 最佳答案 我认为原因是C++不会强制你去做任何你不想要的事情。它会添加额外的元数据,如果有人不使用它,就会强加给他们额外的开销,这与C++语言的设计目标相反。当您想要您描述的功能时,C++确实

c++ - 为什么运行时环境不能决定应用 delete 或 delete[] 而不是程序员?

我读到需要delete[]运算符,因为运行时环境不会保留有关分配的block是否是需要析构函数调用的对象数组的信息,但它确实实际上保留了有关分配的block存储在内存中的位置的信息,当然还有block的大小。只需要一点元数据就可以记住是否需要在删除时调用析构函数,那么为什么不这样做呢?我很确定有一个很好的解释,我不是在质疑它,我只是想知道它。 最佳答案 我认为原因是C++不会强制你去做任何你不想要的事情。它会添加额外的元数据,如果有人不使用它,就会强加给他们额外的开销,这与C++语言的设计目标相反。当您想要您描述的功能时,C++确实

setter/getter 中的 C++ const

我仍在学习C++,而且我到处都在阅读我必须使用const的所有地方(我认为是出于速度原因)。我通常这样写我的getter方法:constboolisReady(){returnready;}但我已经看到一些IDE以这种方式自动生成getter:boolgetReady()const{returnready;}但是,在编写委托(delegate)时,如果const在函数之后,我碰巧发现了这个错误:memberfunction'isReady'notviable:'this'argumenthastype'constVideoReader',butfunctionisnotmarkedco

setter/getter 中的 C++ const

我仍在学习C++,而且我到处都在阅读我必须使用const的所有地方(我认为是出于速度原因)。我通常这样写我的getter方法:constboolisReady(){returnready;}但我已经看到一些IDE以这种方式自动生成getter:boolgetReady()const{returnready;}但是,在编写委托(delegate)时,如果const在函数之后,我碰巧发现了这个错误:memberfunction'isReady'notviable:'this'argumenthastype'constVideoReader',butfunctionisnotmarkedco

c++ - 如果 C++ 中不存在 getter 和 setter,有没有办法自动生成它们?

我有使用Objective-C的经验,在Objective-C中,您可以让编译器为您生成getter和setter(如果它们尚不存在)(@synthesize)。有没有办法在C++中做到这一点,还是我需要自己实现所有的getter和setter? 最佳答案 TheC++CoreGuidelinesadviseagainstusingtrivialgettersandsetters因为它们是不必要的,asymptomofbadobject-orienteddesign.因此,C++没有用于自动生成getter和setter的内置功能(

c++ - 如果 C++ 中不存在 getter 和 setter,有没有办法自动生成它们?

我有使用Objective-C的经验,在Objective-C中,您可以让编译器为您生成getter和setter(如果它们尚不存在)(@synthesize)。有没有办法在C++中做到这一点,还是我需要自己实现所有的getter和setter? 最佳答案 TheC++CoreGuidelinesadviseagainstusingtrivialgettersandsetters因为它们是不必要的,asymptomofbadobject-orienteddesign.因此,C++没有用于自动生成getter和setter的内置功能(

c++ - 为什么 boost::checked_delete "intentionally complex"?

所以我在查看一些boost源代码时发现了这个:(来自)templateinlinevoidchecked_delete(T*x){//intentionallycomplex-simplificationcausesregressionstypedefchartype_must_be_complete[sizeof(T)?1:-1];(void)sizeof(type_must_be_complete);deletex;}有人碰巧知道为什么要这样实现吗?sizeof(T)(例如)还不够吗? 最佳答案 Someoneaskedthes

c++ - 为什么 boost::checked_delete "intentionally complex"?

所以我在查看一些boost源代码时发现了这个:(来自)templateinlinevoidchecked_delete(T*x){//intentionallycomplex-simplificationcausesregressionstypedefchartype_must_be_complete[sizeof(T)?1:-1];(void)sizeof(type_must_be_complete);deletex;}有人碰巧知道为什么要这样实现吗?sizeof(T)(例如)还不够吗? 最佳答案 Someoneaskedthes

c++ - 我应该总是继续使用 `sink` 构造函数或 setter 参数吗?

structTestConstRef{std::stringstr;Test(conststd::string&mStr):str{mStr}{}};structTestMove{std::stringstr;Test(std::stringmStr):str{std::move(mStr)}{}};看了GoingNative2013之后,我明白sink参数应该始终按值传递并使用std::movemove。TestMove::ctor是应用这个成语的正确方法吗?TestConstRef::ctor是否有更好/更高效的情况?那么琐碎的二传手呢?我应该使用以下成语还是传递conststd:

c++ - 我应该总是继续使用 `sink` 构造函数或 setter 参数吗?

structTestConstRef{std::stringstr;Test(conststd::string&mStr):str{mStr}{}};structTestMove{std::stringstr;Test(std::stringmStr):str{std::move(mStr)}{}};看了GoingNative2013之后,我明白sink参数应该始终按值传递并使用std::movemove。TestMove::ctor是应用这个成语的正确方法吗?TestConstRef::ctor是否有更好/更高效的情况?那么琐碎的二传手呢?我应该使用以下成语还是传递conststd: